<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>
  <script src="../packages/reactivity/dist/reactivity.global.js"></script>
  <script>
    const { reactive, readonly, toRaw, markRaw, effect, ref} = VueReactivity
    // 1. 收集索引
    // const arr = reactive([1])
    // effect(() => {
    //   console.log(arr[0]) // get 收集索引0
    // })

    // arr[0] = 2 // 触发trigger
    // arr.length = 0 // 比0大的索引也会触发更新

    // 2. 长度收集
    const arr = reactive([1])
    effect(() => {
      console.log(arr.length) // get 收集索引0
    })
    arr[100] = 2 // 新的索引添加进数组会触发更新

    // 3. 数组方法，访问编译方法会访问数组的长度，会对长度进行依赖收集，可能会造成死循环，这里源码中阻止了变异方法收集依赖
    // push、pop、shift、unshift、splice，不收集依赖
    const arr = reactive([])
    effect(() => {
      console.log(arr.length) // get 收集索引0
    })

  </script>
</body>
</html>